There is often a need to match objects from one group to objects of another group for a variety of purposes. For example, in many customer-service call centers, there is a need to match calling customers with representatives who can answer customer questions or resolve customer complaints. Another example is matching lecturers to lecture topics or lectures venues. Often, there is a desire to incorporate one or more criteria in the matching process in order to seek the best overall matching of customers to representatives, or lecturers to topics, but the task is too difficult when a large number of objects are involved.